home *** CD-ROM | disk | FTP | other *** search
- /******************************************************************************
- * display.c
- ******************************************************************************
- *
- * Purpose:
- * Descriptional text.
- *
- * Authors:
- * Michael Teschner and Christian Henn
- *
- * Note:
- * None.
- *
- * Revisions:
- * 10.11.93 micha Created file.
- *
- ******************************************************************************
- *
- * COPYRIGHT (C) 1992, 1993, 1994
- *
- * BY CHRISTIAN HENN M.E. MUELLER-INSTITUTE FOR MICROSCOPY (MIM)
- * HENN@COMP.BIOZ.UNIBAS.CH CH-4056 BASEL, SWITZERLAND
- *
- * AND MICHAEL WALDHERR-TESCHNER SILICON GRAPHICS INDUSTRIES (SGI)
- * MICHA@BASEL.SGI.COM CH-4125 RIEHEN, SWITZERLAND
- *
- ******************************************************************************
- *
- * PERMISSION TO USE, COPY, MODIFY AND DISTRIBUTE THIS SOFTWARE AND ITS DOCU-
- * MENTATION FOR THE PURPOSE OF RESEARCH, DEVELOPMENT AND EDUCATION IS HEREBY
- * GRANTED FREE OF CHARGE, SUBJECT TO THE FOLLOWING RESTRICTIONS:
- *
- * THE SOFTWARE IS PROVIDED "AS-IS" AND WITHOUT WARRANTY OF ANY KIND, EXPRESS,
- * IMPLIED OR OTHERWISE, INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF DESIGN,
- * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE, OR ARISING FROM A
- * COURSE OF DEALING, USAGE OR TRADE PRACTICE.
- *
- * IN NO EVENT SHALL SILICON GRAPHICS OR THE M.E. MUELLER-INSTITUTE BE LIABLE
- * FOR ANY SPECIAL, INCIDENTAL, INDIRECT OR CONSEQUENTIAL DAMAGES OF ANY KIND,
- * OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
- * WHETHER OR NOT ADVISED OF THE POSSIBILITY OF DAMAGE, AND ON ANY THEORY OF
- * LIABILITY, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF
- * THIS SOFTWARE.
- *
- ******************************************************************************
- */
- /******************************************************************************
- * INCLUDE_FILES
- ******************************************************************************
- */
-
- #include <stdio.h>
- #include <gl/gl.h>
- #include "trackball.h"
-
- /******************************************************************************
- * PRIVATE_PARAMETERS
- ******************************************************************************
- */
-
- float sphere[4] = { 0.0, 0.0, 0.0, 5.0 };
- float material[20][21];
- float light[10][10];
- float envmat[4][4]; /* rotation matrix for the environment map */
- int shade_flag;
-
- gr_init()
- {
-
- /* define the material properties */
- material[0][0] = EMISSION;
- material[0][1] = 0.0;
- material[0][2] = 0.0;
- material[0][3] = 0.0;
- material[0][4] = SPECULAR;
- material[0][5] = 1.0;
- material[0][6] = 1.0;
- material[0][7] = 1.0;
- material[0][8] = DIFFUSE;
- material[0][9] = 0.2;
- material[0][10] = 0.2;
- material[0][11] = 0.2;
- material[0][12] = AMBIENT;
- material[0][13] = 0.1;
- material[0][14] = 0.1;
- material[0][15] = 0.1;
- material[0][16] = SHININESS;
- material[0][17] = 96.0;
- material[0][18] = ALPHA;
- material[0][19] = 1.0;
- material[0][20] = LMNULL;
-
- /* define the light properties */
-
- light[0][0] = LCOLOR; /* the first light source */
- light[0][1] = 1.0;
- light[0][2] = 1.0;
- light[0][3] = 1.0;
- light[0][4] = POSITION;
- light[0][5] = 10.0;
- light[0][6] = 10.0;
- light[0][7] = 10.0;
- /* >>> set from 1.0 (local) to 0.0 (infinite) to produce wrong
- environment mapping */
- light[0][8] = 1.0; /* local light source */
- light[0][9] = LMNULL;
-
- light[1][0] = LCOLOR; /* the second light source */
- light[1][1] = 0.1;
- light[1][2] = 0.1;
- light[1][3] = 0.1;
- light[1][4] = POSITION;
- light[1][5] = -2.0;
- light[1][6] = -0.7;
- light[1][7] = 0.0;
- light[1][8] = 0.0; /* infinite light source */
- light[1][9] = LMNULL;
-
- light[2][0] = LCOLOR; /* the third light source */
- light[2][1] = 0.3;
- light[2][2] = 0.3;
- light[2][3] = 0.3;
- light[2][4] = POSITION;
- light[2][5] = -1.0;
- light[2][6] = -0.7;
- light[2][7] = 0.0;
- light[2][8] = 0.0; /* infinite light source */
- light[2][9] = LMNULL;
-
- light[3][0] = LCOLOR; /* the fourth light source */
- light[3][1] = 0.3;
- light[3][2] = 0.3;
- light[3][3] = 0.3;
- light[3][4] = POSITION;
- light[3][5] = -0.7;
- light[3][6] = -1.0;
- light[3][7] = 0.0;
- light[3][8] = 0.0; /* infinite light source */
- light[3][9] = LMNULL;
-
- light[4][0] = LCOLOR; /* the fifth light source */
- light[4][1] = 0.1;
- light[4][2] = 0.1;
- light[4][3] = 0.1;
- light[4][4] = POSITION;
- light[4][5] = -0.7;
- light[4][6] = -2.0;
- light[4][7] = 0.0;
- light[4][8] = 0.0; /* infinite light source */
- light[4][9] = LMNULL;
-
- light[5][0] = LCOLOR; /* the sixth light source */
- light[5][1] = 0.3;
- light[5][2] = 0.3;
- light[5][3] = 0.3;
- light[5][4] = POSITION;
- light[5][5] = -2.0;
- light[5][6] = -2.0;
- light[5][7] = 0.0;
- light[5][8] = 0.0; /* infinite light source */
- light[5][9] = LMNULL;
-
- /* define the lighting setup */
- lmdef(DEFMATERIAL,1,0,material[0]);
- lmdef(DEFLIGHT, 1,0,light[0]);
- lmdef(DEFLIGHT, 2,0,light[1]);
- lmdef(DEFLIGHT, 3,0,light[2]);
- lmdef(DEFLIGHT, 4,0,light[3]);
- lmdef(DEFLIGHT, 5,0,light[4]);
- lmdef(DEFLIGHT, 6,0,light[5]);
-
- lmdef(DEFLMODEL, 1,0,NULL); /* default lighting model */
-
- /* activate the lighting setup */
- lmbind(MATERIAL,1); /* current material */
- lmbind(LIGHT0, 1); /* current lights */
- lmbind(LMODEL, 1); /* current lighting model */
-
- /* create a sphere object */
- object_create();
-
-
- pushmatrix();
- loadmatrix(imat);
- getmatrix(envmat);
- popmatrix();
-
- /* initialize texture mapping */
- if(!getgdesc(GD_TEXTURE)){
- printf("No texture mapping available on this machine\n");
- exit(0);
- } else {
- sbr_tread("texture.rgb", 1);
- }
-
- } /* END graphics_init_cb */
-
- sbr_bind_high()
- {
- lmbind(LIGHT1, 2);
- lmbind(LIGHT2, 3);
- lmbind(LIGHT3, 4);
- lmbind(LIGHT4, 5);
- lmbind(LIGHT5, 6);
- lmbind(LMODEL, 1); /* current lighting model */
-
- }
-
- sbr_bind_low()
- {
- lmbind(LIGHT1, 0);
- lmbind(LIGHT2, 0);
- lmbind(LIGHT3, 0);
- lmbind(LIGHT4, 0);
- lmbind(LIGHT5, 0);
- lmbind(LMODEL, 1); /* current lighting model */
-
- }
-
- /******************************************************************************
- *+
- * SCENE_DRAW
- *
- * Function purpose:
- * Draw the entire scene.
- *
- * Error behaviour:
- * Returns FALSE upon successful completion of the function call.
- *
- */
-
- int scene_draw(void)
-
- /*
- *-
- ******************************************************************************
- */
-
- {
-
- if( shade_flag == 1){ /* if phong is on */
- sbr_settexture(1);
- mmode(MTEXTURE);
- loadmatrix(imat);
- translate(.5,.5,0.0);
- scale(.5,.5,1.0);
- multmatrix(mat);
- mmode(MVIEWING);
- }
-
- pushmatrix();
- ortho( -1.5, 1.5, -1.5, 1.5, -1.5, 1.5 );
- loadmatrix(imat);
- scale(gr_sca, gr_sca, gr_sca);
- multmatrix(mat);
- czclear(0xff000000, getgdesc(GD_ZMAX));
-
- /* draw a sphere */
- object_draw();
-
- swapbuffers();
- popmatrix();
-
- if( shade_flag == 1 )sbr_settexture(0); /* turn texturing off */
-
-
- } /* END scene_draw */
-
-
- sbr_gtfeedb(Matrix matrix,float point[],float result[])
- {
- register int i;
- register float pnt[3];
-
- pnt[0]=point[0];pnt[1]=point[1];pnt[2]=point[2];
- for(i = 0; i<3; i++)
- result[i] = pnt[0]*matrix[0][i]+
- pnt[1]*matrix[1][i]+
- pnt[2]*matrix[2][i]+
- matrix[3][i];
- } /* end sbr_gtfeedb */
-